﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;

namespace BS_Gimnasio.General
{
    [DataContract()]
    public abstract class cls_Base
    {
        #region Varibles

        protected int _idUsuarioInicioSeccion;
        protected string[] _filtros;
        protected int _numeroError;
        protected string _mensajeError;

        #endregion

        #region Propiedades

        [DataMember()]
        public int IdUsuarioInicioSeccion
        {
            get { return _idUsuarioInicioSeccion; }
            set { _idUsuarioInicioSeccion = value; }
        }

        [DataMember()]
        public string[] Filtros
        {
            get { return _filtros; }
            set { _filtros = value; }
        }

        [DataMember()]
        public string MensajeError
        {
            get { return _mensajeError; }
            set { _mensajeError = value; }
        }

        [DataMember()]
        public int NumeroError
        {
            get { return _numeroError; }
            set { _numeroError = value; }
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Metodo generico para utilzar los metodos propios de la clase.
        /// A esto se refiere a solo metodos unicacamnete logicos; 
        /// no sea una insercion, actualizacion o seleccion de un registro.
        /// </summary>
        /// <param name="opcion"></param>
        /// <param name="resultado"></param>
        public virtual void OtrosProcesos(int opcion, ref object resultado)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Firmas

        /// <summary>
        /// Metodo que se utilizara para la insercion o la actualizacion
        /// de registro especifico.
        /// Donde "Verdadero" es Insercion y "False" es Actualizar.
        /// </summary>
        /// <param name="tipoOperacion"></param>
        /// <param name="mensajeError"></param>
        /// <returns></returns>
        public abstract void InsertarActualizarRegistro(bool tipoOperacion, ref string mensajeError);

        /// <summary>
        /// Metodo que se utilizara para la creacion del objeto
        /// acuerdo a un registro.
        /// </summary>
        /// <returns></returns>
        public abstract cls_Base TraerObjeto();

        /// <summary>
        /// Metodo que se utilizara para la eliminacion de registro.
        /// </summary>
        /// <param name="mensajeError"></param>
        /// <returns></returns>
        public abstract bool EliminarRegistro(ref string mensajeError);

        /// <summary>
        /// Metodo que se utilizara para listar los metodos de tres maneras:
        /// 1. Listar (Trae todos los registros)
        /// 2. ListrarFiltro (Hace un filtrado en el tabla especificada)
        /// 3. TraeObjeto
        /// </summary>
        /// <param name="opcion"></param>
        /// <returns></returns>
        public abstract DataTable Listar(int opcion);

        #endregion

    }
}
